//
//  Man.m
//  07-内存管理
//
//  Created by 402030900@qq.com on 16/7/12.
//  Copyright © 2016年 402030900@qq.com. All rights reserved.
//

#import "Man.h"

@implementation Man
// 协议方法的实现,是签订者的实现(@implementation)中
-(void)sayHello{
    NSLog(@"Hello,I'm Gay");

}
-(id)copyWithZone:(NSZone *)zone{
// 开辟新的空间,创建一个新的对象
    Man * man = [[Man allocWithZone:zone]init];
    // 浅拷贝,只创建了新的对象,但是所有的属性还指向原来的属性
    man.name = self.name;
    man.sexual = self.sexual;
    // 深拷贝,不止创建新的对象,所有的属性,也对应的拷贝一份新的
    man.name= [self.name copy];
    man.sexual = [self.sexual copy];
    return man;
}
// ARC可以写dealloc 但不能写super dealloc
-(void)dealloc{
   // 释放所有的属性生成的成员变量(语义使用retain.copy的需要释放)
    [_mId release];
    [_name release];
    [_sexual release];
    [_mDescription release];
    [_gayBoy release];
    [super dealloc];
}
// 赋值用,在这个方法中,编写找不到key值的处理措施
-(void)setValue:(id)value forUndefinedKey:(NSString *)key{
    if ([key isEqualToString:@"id"]) {
        self.mId = value;
    }
    if ([key isEqualToString:@"description"]) {
        self.mDescription = value;
    }
}
// 取值用
-(id)valueForUndefinedKey:(NSString *)key{
    return nil;
}
//MRC下的setter方法
//assign修饰的属性的setter方法
-(void)setNumber:(NSInteger)number{
    _number = number;
}
// retain修饰的属性的setter方法
-(void)setName:(NSString *)name{
    if (_name != name) {
        [_name release];
        _name = [name retain];
    }
}
// copy修饰的属性的setter方法
-(void)setMId:(NSString *)mId{
    if (_mId != mId) {
        [_mId release];
        _mId = [mId copy];
    }
}
@end
